﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;

namespace Botonet
{
    public partial class admin : System.Web.UI.Page
    {
        private cDB DBclass = new cDB();

        protected void Page_Load(object sender, EventArgs e)
        {

            int cant = 0;
            if (Session["Tipo"] == null)
            {
                Response.Redirect("index.aspx", false);
            }
            else if (Session["Tipo"].ToString() == "admin")
            {
                if (!IsPostBack)
                {
                    ListarGrupos();
                    cant = Usuarios_Nuevos();
                    if (cant > 0)
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "dialog", "<script type=\"text/javascript\">msg='<div id=\"txtMensaje\">Hay " + cant + " usuarios nuevos que esperan ser asignados a un grupo</div>';</script> ");
                    }
                }
            }
            else
            {
                Response.Redirect("index.aspx", false);
            }
        }

        private int Usuarios_Nuevos()
        {
            int a = 0;
            string consulta = "SELECT Usuarios.* FROM Usuarios LEFT JOIN Usuarios_Grupos ";
            consulta += " ON Usuarios.Email = Usuarios_Grupos.Email_Usuario";
            consulta += " WHERE Usuarios_Grupos.Grupo_Usuario IS NULL";
            consulta += " AND Usuarios.Email <> 'admin@botonet.com'";
            consulta += " AND Usuarios.SuperUser = 0";
            cDB DB = new cDB();
            if (DB.execQuery(consulta, "Usuarios"))
            {
                foreach (DataRow dr in DB.DS.Tables["Usuarios"].Rows)
                {
                    a++;
                }
            }
            return a;
        }

        private bool ListarGrupos()
        {
            idListaGrupos.Items.Clear();

            string strQuery = "SELECT * FROM Grupos";
            ListItem itemGrupo;
            if (DBclass.execQuery(strQuery, "Grupos"))
            {
                itemGrupo = new ListItem("(GRUPOS)", "0");
                idListaGrupos.Items.Add(itemGrupo);
                Application["Grupos"] = DBclass.DS.Tables["Grupos"].Copy();

                foreach (System.Data.DataRow FilaGrupo in DBclass.DS.Tables["Grupos"].Rows)
                {
                    itemGrupo = new ListItem(FilaGrupo["Nombre_Grupos"].ToString(), FilaGrupo["id_Grupos"].ToString());

                    idListaGrupos.Items.Add(itemGrupo);
                }
                ListarUsuarios("0");
                return true;
            }
            return false;
        }
        protected void idGrupos_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (idListaGrupos.SelectedItem.Value != "0")
            {

                System.Data.DataTable grupos = (System.Data.DataTable)Application["Grupos"];

                if ((idListaGrupos.SelectedItem.Text != "") && (idListaGrupos.SelectedItem.Text != "(GRUPOS)"))
                {
                    idDescripcionGrupo.Text = "<p>" + idListaGrupos.SelectedItem.Text + "</p>";
                    if (grupos.Rows[(idListaGrupos.SelectedIndex) - 1]["Descripcion_Grupos"].ToString() != "")
                    {
                        idDescripcionGrupo.Text += "<p>" + grupos.Rows[(idListaGrupos.SelectedIndex) - 1]["Descripcion_Grupos"].ToString() + "</p>";
                    }
                    else
                    {
                        idDescripcionGrupo.Text = "";
                    }

                    ListarUsuarios(idListaGrupos.SelectedItem.Value);
                    DetalleUsuario();
                }
                else
                {
                    idDescripcionGrupo.Text = "";
                }

            }
            else
            {
                idDescripcionGrupo.Text = "";
            }

        }
        private bool ListarUsuarios(string strIdGrupo)
        {
            idListaUsuarios.Items.Clear();

            string strQuery = "SELECT Nombre, Apellido, Email, DNI FROM Usuarios INNER JOIN Usuarios_Grupos ";
            strQuery += " ON Usuarios.Email = Usuarios_Grupos.Email_Usuario ";
            strQuery += " WHERE Usuarios_Grupos.Grupo_Usuario = " + strIdGrupo;
            ListItem itemUsuario;
            if (DBclass.execQuery(strQuery, "Usuarios"))
            {
                itemUsuario = new ListItem("(USUARIOS)", "0");
                idListaUsuarios.Items.Add(itemUsuario);
                Application["Usuarios"] = DBclass.DS.Tables["Usuarios"];

                foreach (System.Data.DataRow FilaUsuario in DBclass.DS.Tables["Usuarios"].Rows)
                {
                    itemUsuario = new ListItem(FilaUsuario["Nombre"].ToString() + " " + FilaUsuario["Apellido"].ToString(), FilaUsuario["Email"].ToString());

                    idListaUsuarios.Items.Add(itemUsuario);
                }
                DetalleUsuario();
                return true;
            }
            return false;
        }

        protected void idListaUsuarios_SelectedIndexChanged(object sender, EventArgs e)
        {
            DetalleUsuario();
            Page.ClientScript.RegisterStartupScript(this.GetType(), "tab", "<script type=\"text/javascript\">tabActive=2</script>");
            idComentarios.Text = "";
        }

        protected void DetalleUsuario()
        {
            if (idListaUsuarios.SelectedItem.Value != "0")
            {

                System.Data.DataTable Usuarios = (System.Data.DataTable)Application["Usuarios"];

                if ((idListaUsuarios.SelectedItem.Text != "") && (idListaUsuarios.SelectedItem.Text != "(USUARIOS)"))
                {
                    idDescripcionUsuario.Text = "<p>" + idListaUsuarios.SelectedItem.Text + "</p>";
                    idDescripcionUsuario.Text += "<p> Email:" + Usuarios.Rows[(idListaUsuarios.SelectedIndex) - 1]["Email"].ToString() + "</p>";
                    if (Usuarios.Rows[(idListaUsuarios.SelectedIndex) - 1]["DNI"].ToString() != "")
                    {

                        idDescripcionUsuario.Text += "<p> DNI:" + Usuarios.Rows[(idListaUsuarios.SelectedIndex) - 1]["DNI"].ToString() + "</p>";
                    }
                    else
                    {
                        idDescripcionUsuario.Text = "";
                    }
                }
                else
                {
                    idDescripcionUsuario.Text = "";
                }

            }
            else
            {
                idDescripcionUsuario.Text = "";
            }
        }

        protected void idReporteGrupal_Click(object sender, EventArgs e)
        {
            int i, intPuntos;
            string strCalificado, strTipoEval, strNombre;
            DateTime Fecha;
            System.Web.UI.DataVisualization.Charting.Series serie = new System.Web.UI.DataVisualization.Charting.Series();

            if ((idListaGrupos.SelectedItem.Value != "0")
                && (idDesde.Text != "")
                && (idHasta.Text != "")
                && ((DateTime.Parse(idDesde.Text)) < (DateTime.Parse(idHasta.Text))))
            {

                string strQuery = "SELECT id_TipoEvaluacion, Email_Calificado, Fecha, Nombre, Apellido, ";
                strQuery += " AVG(Calificacion) AS Puntos";
                strQuery += " FROM Evaluaciones";
                strQuery += " INNER JOIN Usuarios ON Email_Calificado = Email";
                strQuery += " WHERE (id_Grupo = " + idListaGrupos.SelectedItem.Value + ")";
                strQuery += " AND (Fecha BETWEEN '" + idDesde.Text + "' AND '" + idHasta.Text + "')";
                strQuery += " GROUP BY id_TipoEvaluacion, Email_Calificado , Fecha, Nombre, Apellido";
                strQuery += " ORDER BY id_TipoEvaluacion, Email_Calificado ,Fecha";

                if (DBclass.execQuery(strQuery, "Evaluaciones"))
                {
                    idGrafoGrupalProductivo.Series.Clear();
                    idGrafoGrupalSocial.Series.Clear();
                    for (i = 0; i < DBclass.DS.Tables["Evaluaciones"].Rows.Count; i++)
                    {
                        strTipoEval = DBclass.DS.Tables["Evaluaciones"].Rows[i]["id_TipoEvaluacion"].ToString();
                        strCalificado = DBclass.DS.Tables["Evaluaciones"].Rows[i]["Email_Calificado"].ToString();
                        strNombre = DBclass.DS.Tables["Evaluaciones"].Rows[i]["Nombre"].ToString() + " " + DBclass.DS.Tables["Evaluaciones"].Rows[i]["Apellido"].ToString();
                        intPuntos = int.Parse(DBclass.DS.Tables["Evaluaciones"].Rows[i]["Puntos"].ToString());
                        Fecha = (DateTime)DBclass.DS.Tables["Evaluaciones"].Rows[i]["Fecha"];

                        if (DBclass.DS.Tables["Evaluaciones"].Rows[i]["id_TipoEvaluacion"].ToString() == "1")
                        {
                            idGrafoGrupalProductivo.Visible = true;
                            if ((i == 0) || (DBclass.DS.Tables["Evaluaciones"].Rows[i - 1]["Email_Calificado"].ToString() != strCalificado))
                            {
                                idGrafoGrupalProductivo.Series.Add(strNombre);
                                idGrafoGrupalProductivo.Legends.Add(strNombre);
                                idGrafoGrupalProductivo.Series[strNombre].ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Line;
                                idGrafoGrupalProductivo.Series[strNombre].XAxisType = System.Web.UI.DataVisualization.Charting.AxisType.Primary;
                                idGrafoGrupalProductivo.Series[strNombre].XValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.DateTime;
                                idGrafoGrupalProductivo.Series[strNombre].YAxisType = System.Web.UI.DataVisualization.Charting.AxisType.Primary;
                                idGrafoGrupalProductivo.Series[strNombre].YValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.Int32;
                            }

                            idGrafoGrupalProductivo.Series[strNombre].Points.AddXY(Fecha, intPuntos);
                        }
                        else if (DBclass.DS.Tables["Evaluaciones"].Rows[i]["id_TipoEvaluacion"].ToString() == "2")
                        {
                            idGrafoGrupalSocial.Visible = true;
                            if ((i == 0)
                                || (DBclass.DS.Tables["Evaluaciones"].Rows[i - 1]["Email_Calificado"].ToString() != strCalificado)
                                || (DBclass.DS.Tables["Evaluaciones"].Rows[i - 1]["id_TipoEvaluacion"].ToString() != DBclass.DS.Tables["Evaluaciones"].Rows[i]["id_TipoEvaluacion"].ToString()))
                            {

                                idGrafoGrupalSocial.Series.Add(strNombre);
                                idGrafoGrupalSocial.Legends.Add(strNombre);
                                idGrafoGrupalSocial.Series[strNombre].ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Line;
                                idGrafoGrupalSocial.Series[strNombre].XAxisType = System.Web.UI.DataVisualization.Charting.AxisType.Primary;
                                idGrafoGrupalSocial.Series[strNombre].XValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.DateTime;
                                idGrafoGrupalSocial.Series[strNombre].YAxisType = System.Web.UI.DataVisualization.Charting.AxisType.Primary;
                                idGrafoGrupalSocial.Series[strNombre].YValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.Int32;
                            }

                            idGrafoGrupalSocial.Series[strNombre].Points.AddXY(Fecha, intPuntos);
                        }
                    }
                }
            }
            else if ((idDesde.Text == "") || (idHasta.Text == ""))
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "dialog", "<script type=\"text/javascript\">msg='<div id=\"txtMensaje\"> Debe seleccionar un rango de fecha</div>';</script> ");
            }

        }

        protected void idReporteIndividual_Click(object sender, EventArgs e)
        {
            int i, intPuntos;
            string strEmisor, strTipoEval, strComentario, strNombre;
            DateTime Fecha;
            System.Web.UI.DataVisualization.Charting.Series serie = new System.Web.UI.DataVisualization.Charting.Series();
            Dictionary<string, string> arrComentarios = new Dictionary<string, string>();
            if (idListaGrupos.SelectedItem.Value != "0")
            {
                if ((idDesde.Text != "") && (idHasta.Text != ""))
                {
                    string strQuery = "SELECT * ";
                    strQuery += " FROM Evaluaciones";
                    strQuery += " INNER JOIN Usuarios ON Email_Emisor = Email";
                    strQuery += " WHERE (id_Grupo = " + idListaGrupos.SelectedItem.Value + ")";
                    strQuery += " AND (Fecha BETWEEN '" + idDesde.Text + "' AND '" + idHasta.Text + "')";
                    strQuery += " AND Email_Calificado = '" + idListaUsuarios.SelectedItem.Value + "'";
                    strQuery += " ORDER BY id_TipoEvaluacion, Email_Emisor ,Fecha";

                    if (DBclass.execQuery(strQuery, "Evaluaciones"))
                    {
                        idGrafoIndividualProductivo.Series.Clear();
                        idGrafoIndividualSocial.Series.Clear();
                        idComentarios.Text = "<div id=\"idAccComentarios\">";
                        for (i = 0; i < DBclass.DS.Tables["Evaluaciones"].Rows.Count; i++)
                        {
                            strTipoEval = DBclass.DS.Tables["Evaluaciones"].Rows[i]["id_TipoEvaluacion"].ToString();
                            strEmisor = DBclass.DS.Tables["Evaluaciones"].Rows[i]["Email_Emisor"].ToString();
                            strNombre = DBclass.DS.Tables["Evaluaciones"].Rows[i]["Nombre"].ToString() + " " + DBclass.DS.Tables["Evaluaciones"].Rows[i]["Apellido"].ToString();
                            intPuntos = int.Parse(DBclass.DS.Tables["Evaluaciones"].Rows[i]["Calificacion"].ToString());
                            strComentario = DBclass.DS.Tables["Evaluaciones"].Rows[i]["Comentario"].ToString();
                            Fecha = (DateTime)DBclass.DS.Tables["Evaluaciones"].Rows[i]["Fecha"];

                            if (DBclass.DS.Tables["Evaluaciones"].Rows[i]["id_TipoEvaluacion"].ToString() == "1")
                            {
                                idGrafoIndividualProductivo.Visible = true;
                                if (!arrComentarios.ContainsKey(strEmisor))
                                {
                                    arrComentarios.Add(strEmisor, "<h3>" + strNombre + "</h3><div>");

                                }
                                if (strComentario != "")
                                    arrComentarios[strEmisor] += "<p><i>Fecha: " + Fecha + "</i>:</p><p>" + strComentario + "</p>";
                                if ((i == 0) || (DBclass.DS.Tables["Evaluaciones"].Rows[i - 1]["id_TipoEvaluacion"].ToString() == "2") || (DBclass.DS.Tables["Evaluaciones"].Rows[i - 1]["Email_Emisor"].ToString() != strEmisor))
                                {
                                    idGrafoIndividualProductivo.Series.Add(strNombre);
                                    idGrafoIndividualProductivo.Legends.Add(strNombre);
                                    idGrafoIndividualProductivo.Series[strNombre].ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Line;
                                    idGrafoIndividualProductivo.Series[strNombre].XAxisType = System.Web.UI.DataVisualization.Charting.AxisType.Primary;
                                    idGrafoIndividualProductivo.Series[strNombre].XValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.DateTime;
                                    idGrafoIndividualProductivo.Series[strNombre].YAxisType = System.Web.UI.DataVisualization.Charting.AxisType.Primary;
                                    idGrafoIndividualProductivo.Series[strNombre].YValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.Int32;
                                }

                                idGrafoIndividualProductivo.Series[strNombre].Points.AddXY(Fecha, intPuntos);
                            }
                            else if (DBclass.DS.Tables["Evaluaciones"].Rows[i]["id_TipoEvaluacion"].ToString() == "2")
                            {
                                idGrafoIndividualSocial.Visible = true;
                                if ((i == 0) || (DBclass.DS.Tables["Evaluaciones"].Rows[i - 1]["id_TipoEvaluacion"].ToString() == "1") || (DBclass.DS.Tables["Evaluaciones"].Rows[i - 1]["Email_Emisor"].ToString() != strEmisor))
                                {
                                    idGrafoIndividualSocial.Series.Add(strNombre);
                                    idGrafoIndividualSocial.Legends.Add(strNombre);
                                    idGrafoIndividualSocial.Series[strNombre].ChartType = System.Web.UI.DataVisualization.Charting.SeriesChartType.Line;
                                    idGrafoIndividualSocial.Series[strNombre].XAxisType = System.Web.UI.DataVisualization.Charting.AxisType.Primary;
                                    idGrafoIndividualSocial.Series[strNombre].XValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.DateTime;
                                    idGrafoIndividualSocial.Series[strNombre].YAxisType = System.Web.UI.DataVisualization.Charting.AxisType.Primary;
                                    idGrafoIndividualSocial.Series[strNombre].YValueType = System.Web.UI.DataVisualization.Charting.ChartValueType.Int32;
                                }

                                idGrafoIndividualSocial.Series[strNombre].Points.AddXY(Fecha, intPuntos);
                            }
                        }

                        foreach (KeyValuePair<string, string> entrada in arrComentarios)
                        {
                            idComentarios.Text += entrada.Value + "</div>";
                        }
                        idComentarios.Text += "</div>";
                    }
                }
                else
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "dialog", "<script type=\"text/javascript\">tabActive=2;msg='<div id=\"txtMensaje\"> Debe seleccionar un rango de fecha</div>';</script> ");
            }
            else
                Page.ClientScript.RegisterStartupScript(this.GetType(), "tab", "<script type=\"text/javascript\">msg='<div>Seleccione un usuario valido.</div>';</script>");
            Page.ClientScript.RegisterStartupScript(this.GetType(), "tab", "<script type=\"text/javascript\">tabActive=2;</script>");
        }


    }
}